import Vue from "vue";
import App from "./App";
import store from "./store";
import helper from "./common/helper.js";
import manifest from "@/manifest.json";
import hxNavbar from "./components/hx-navbar/hx-navbar.vue";
import config from "@/config.js";
import "./uni.promisify.adaptor";
import uView from "@/uni_modules/uview-ui";
Vue.use(uView);
Vue.component("hx-navbar", hxNavbar);

Vue.prototype.webtitle = "超脑智算";
Vue.prototype.weburl = uni.getStorageSync("domain");
console.log("main的weburl", Vue.prototype.weburl);
Vue.prototype.helper = helper;
Vue.config.productionTip = false;
// 关闭生产提示
Vue.prototype.$store = store;
// 小程序页面组件和这个`App.vue`组件的写法和引入方式是一致的，为了区分两者，需要设置`mpType`值
App.mpType = "app";
import { mapState, mapMutations } from "vuex";

Vue.mixin({
  data() {
    return {
      X: 260,
      Y: 180,
    };
  },
  async onLoad() {
    function compareVersion(v1, v2) {
    	const v1Parts = v1.split('.').map(Number);
    	const v2Parts = v2.split('.').map(Number);
    	const maxLength = Math.max(v1Parts.length, v2Parts.length);
    
    	for (let i = 0; i < maxLength; i++) {
    		const part1 = v1Parts[i] || 0; // 默认补 0
    		const part2 = v2Parts[i] || 0;
    
    		if (part1 < part2) {
    			return -1; // 当前版本小于最新版本
    		}
    		if (part1 > part2) {
    			return 1; // 当前版本大于最新版本
    		}
    	}
    
    	return 0; // 版本号相同
    }
    async function checkAppVersion(url) {
    
    	try {
    		// 获取当前版本号（从本地存储或静态配置中获取）
    		const currentVersion = typeof plus !== 'undefined' ? plus.runtime.version :
    		'1.3.38'; // 当前版本号，实际项目中可通过 `manifest.json` 动态获取
    		const res = await uni.request({
    			url: `${url}/admin/system/getSystemConfig`, // 服务端存储的版本信息
    			method: "GET",
    		});
			
    		if (res.statusCode === 200) {
    			const latestVersion = res.data.app_version; // 获取服务端的最新版本号
    			const downloadUrl = res.data.app; // 获取最新版本的下载地址
    			if (compareVersion(currentVersion, latestVersion) < 0) {
    				const showUpdateModal = () => {
    					uni.showModal({
    						title: "更新提示",
    						content: `发现新版本 ${latestVersion}，请立即更新以体验最新功能。`,
    						confirmText: "去更新",
    						showCancel: false, // 去掉取消按钮
    						success: (result) => {
    							if (result.confirm) {
    								showUpdateModal();
    								// 用户点击了“去更新”，尝试打开下载地址
    								// #ifdef APP-PLUS
    								plus.runtime.openURL(downloadUrl)
    								// #endif
    								// #ifdef MP-WEIXIN
    								uni.setClipboardData({
    									data: href,
    									success: function() {
    										uni.showModal({
    											content: "网址已复制,请在浏览器中粘贴打开",
    											showCancel: false
    										})
    									}
    								})
    								// #endif
    							}
    						},
    						fail: () => {
    							console.error("弹框失败");
    							// 保证弹框持续存在
    							showUpdateModal();
    						},
    					});
    				};
    
    				showUpdateModal(); // 初始弹框调用
    			}
    		} else {
    			console.error("无法获取最新版本信息:", res);
    		}
    	} catch (error) {
    		console.error("检查版本号时发生错误:", error);
    	}
    }
    async function fetchSiteroot() {
    	try {
    		const {
    			siteroot
    		} = await config.appInfo(); // 获取 siteroot 的异步值
    		uni.setStorageSync('domain', siteroot);
    		helper.setWebsiteUrl(siteroot);
    		Vue.prototype.weburl = siteroot;
    		// 用户点击了“去更新”，尝试打开下载地址
    		// #ifdef APP-PLUS
    		checkAppVersion(siteroot)
    		// #endif
    		// #ifdef MP-WEIXIN
    		// #endif
    		//console.log('onload',Vue.prototype.weburl);
    	} catch (error) {
    		console.error('获取 siteroot 值时发生错误:', error);
    	}
    }
    fetchSiteroot();
    if (this.$initData$) {
      Object.assign(this, JSON.parse(this.$initData$));
    } else {
      this.$initData$ = JSON.stringify(this.$data);
    }
  },
  onShow() {},
});
const app = new Vue({
  store,
  ...App,
});

app.$mount();
